home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xml / DTDMLWriter$ElemProxy.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  4.8 KB  |  152 lines

  1. package com.extensibility.xml;
  2.  
  3. import com.extensibility.util.Debug;
  4. import java.io.StringWriter;
  5. import java.util.Enumeration;
  6.  
  7. public class DTDMLWriter$ElemProxy extends DTDMLWriter.DeclProxy {
  8.    // $FF: synthetic field
  9.    final DTDMLWriter this$0;
  10.    ElementDeclaration decl;
  11.    DTDMLWriter.AttrProxy attrProxy;
  12.  
  13.    DTDMLWriter$ElemProxy(DTDMLWriter var1) {
  14.       super((DTDMLWriter)null);
  15.       this.this$0 = var1;
  16.       this.attrProxy = new DTDMLWriter.AttrProxy(this.this$0);
  17.    }
  18.  
  19.    DTDMLWriter$ElemProxy(DTDMLWriter var1, ElementDeclaration var2) {
  20.       super((DTDMLWriter)null);
  21.       this.this$0 = var1;
  22.       this.attrProxy = new DTDMLWriter.AttrProxy(this.this$0);
  23.       this.setDecl(var2);
  24.    }
  25.  
  26.    void setDecl(ElementDeclaration var1) {
  27.       this.decl = var1;
  28.       super.setDecl(var1);
  29.    }
  30.  
  31.    String getFrequency(char var1) {
  32.       if (var1 == '?') {
  33.          return "Optional";
  34.       } else if (var1 == '+') {
  35.          return "OneOrMore";
  36.       } else if (var1 == '*') {
  37.          return "ZeroOrMore";
  38.       } else {
  39.          Debug.assert(false, "unknown occ char");
  40.          return "";
  41.       }
  42.    }
  43.  
  44.    public void write(SXE var1, boolean var2) {
  45.       var1.writeElem("ElementDecl");
  46.       ((DTDMLWriter.DeclProxy)this).writeNameAttr(var1);
  47.       var1.writeElem("dtdsource", -1);
  48.       var1.writeRawText("<![CDATA[\r\n");
  49.  
  50.       try {
  51.          StringWriter var3 = new StringWriter();
  52.          this.decl.write(var3);
  53.          String var4 = this.this$0.makeHTMLFriendly(var3.toString());
  54.          var1.writeRawText(var4);
  55.       } catch (Exception var6) {
  56.       }
  57.  
  58.       var1.writeRawText("]]>\r\n");
  59.       var1.flush("dtdsource");
  60.       ((DTDMLWriter.DeclProxy)this).writeMore(var1, this.decl.getDataType());
  61.       if (var2) {
  62.          ((DTDMLWriter.DeclProxy)this).writeComments(var1);
  63.       }
  64.  
  65.       ContentModel var7 = this.decl.getEffectiveModel();
  66.       var1.writeElem("Model", -1);
  67.       this.writeModel(var1, var7);
  68.       var1.flush("Model");
  69.       Enumeration var8 = this.decl.getAttributes(true);
  70.       if (var8.hasMoreElements()) {
  71.          var1.writeElem("AttGroup", -1);
  72.  
  73.          while(var8.hasMoreElements()) {
  74.             AttributeDeclaration var5 = (AttributeDeclaration)var8.nextElement();
  75.             this.attrProxy.setDecl(var5);
  76.             this.attrProxy.writeType(var1, var2);
  77.          }
  78.  
  79.          var1.flush("AttGroup");
  80.       }
  81.  
  82.       var1.flush("ElementType");
  83.    }
  84.  
  85.    void writeRef(SXE var1, String var2, char var3) {
  86.       var1.writeElem("Ref", -1);
  87.       String var4 = DTDUtilities.extractUnqualifiedName(var2);
  88.       String var5 = DTDUtilities.extractPrefix(var2);
  89.       var1.writeAttr("Element", var4);
  90.       if (var5.length() > 0) {
  91.          var1.writeAttr("ElementNS", String.valueOf("URI for prefix ").concat(String.valueOf(var5)));
  92.       }
  93.  
  94.       if (var3 != 0) {
  95.          var1.writeAttr("Frequency", this.getFrequency(var3));
  96.       }
  97.  
  98.       var1.flush("Ref");
  99.    }
  100.  
  101.    void writeTerm(SXE var1, ContentModelTerm var2) {
  102.       if (var2 instanceof ContentModel) {
  103.          ContentModelTermEnum var3 = var2.getTerms(true);
  104.  
  105.          while(var3.hasMoreElements()) {
  106.             this.writeTerm(var1, (ContentModelTerm)var3.nextElement());
  107.          }
  108.       } else if (!var2.isGroup()) {
  109.          this.writeRef(var1, var2.getTerm(), var2.getOccurance());
  110.       } else {
  111.          String var5 = var2.getChildConnection() == '|' ? "Choice" : "Seq";
  112.          var1.writeElem(var5, -1);
  113.          if (var2.getOccurance() != 0) {
  114.             var1.writeAttr("Frequency", this.getFrequency(var2.getOccurance()));
  115.          }
  116.  
  117.          ContentModelTermEnum var4 = var2.getTerms(true);
  118.  
  119.          while(var4.hasMoreElements()) {
  120.             this.writeTerm(var1, (ContentModelTerm)var4.nextElement());
  121.          }
  122.  
  123.          var1.flush(var5);
  124.       }
  125.  
  126.    }
  127.  
  128.    void writeModel(SXE var1, ContentModel var2) {
  129.       if (var2.isAny()) {
  130.          var1.writeElem("Any", true);
  131.       } else if (var2.isEmpty()) {
  132.          var1.writeElem("Empty", true);
  133.       } else if (var2.isTextOnly()) {
  134.          var1.writeElem("PCData", true);
  135.       } else if (var2.isTagsOnly()) {
  136.          this.writeTerm(var1, var2);
  137.       } else if (var2.isMixed()) {
  138.          var1.writeElem("Mixed", -1);
  139.          ContentModelTermEnum var3 = ((ContentModelTerm)var2).getLeafTerms();
  140.  
  141.          while(var3.hasMoreElements()) {
  142.             ContentModelTerm var4 = var3.nextContentModelTerm();
  143.             CMTReferent var5 = var4.getReferent();
  144.             if (var5 instanceof ElementDeclaration) {
  145.                this.writeRef(var1, var4.getTerm(), '\u0000');
  146.             }
  147.          }
  148.       }
  149.  
  150.    }
  151. }
  152.